import uvicorn
from typing import Union, List, Dict, Optional
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr


class Item(BaseModel):
    name: str
    # des: Optional[str] = None
    des: str

items = [
    {"name": "lxq", "des": "aaaabbbbb"},
    {"name": "lxy", "des": "yiyiwawa", "size": "aaa"},
    {"name": "lyy"}
]

app = FastAPI()


@app.get('/items', response_model=List[Item])
async def read_items():
    return items


'''
假设响应内容多了个 size
items[1] 多了个 size 字段，但因为响应模型并不包含 size，所以最终返回的数据也不会包含 size

'''


'''
如果响应内容缺少des字段

raise ValidationError(errors, field.type_)
pydantic.error_wrappers.ValidationError: 1 validation error for Item
response -> 2 -> des
field required (type=value_error.missing)

因为响应模型声明了 name、description 都是必传参数，假设不传就会报错！！！！！ 如果是Optional的话则不会报错。
但又因为是响应数据有问题，代表应用程序（服务端）有问题，所以客户端发送请求就会报 500

'''



if __name__ == '__main__':
    uvicorn.run(app='main2:app', host='127.0.0.1', port=8000, reload=True, debug=True)
